package com.zy.configs;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.reactive.CorsWebFilter;
import org.springframework.web.cors.reactive.UrlBasedCorsConfigurationSource;

import java.util.Arrays;
import java.util.Collections;

/**
 * Spring Cloud Gateway 全局CORS配置
 */
@Configuration
public class GatewayCorsConfig {

    @Bean
    public CorsWebFilter corsWebFilter() {
        // 创建CORS配置源
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        // 创建CORS配置对象
        CorsConfiguration corsConfig = new CorsConfiguration();
        // 允许的源，可以根据您的前端域名进行配置
        // 生产环境中，请替换为您的实际前端域名，例如 "http://your-frontend-domain.com"
        corsConfig.setAllowedOrigins(Arrays.asList("*"));
        // 允许的HTTP方法
        corsConfig.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS"));
        // 允许的请求头
        corsConfig.setAllowedHeaders(Collections.singletonList("*")); // 允许所有请求头
        // 允许发送Cookie、HTTP认证信息等凭据
        // 注意：如果设置为true，allowedOrigins不能为"*"，必须是具体的源
       // corsConfig.setAllowCredentials(true);
        // 预检请求（OPTIONS请求）的缓存时间，单位秒
        // 在此时间内，浏览器无需再发送预检请求
        corsConfig.setMaxAge(3600L);
        // 将CORS配置注册到所有路径
        source.registerCorsConfiguration("/**", corsConfig);
        // 返回CORS Web过滤器
        return new CorsWebFilter(source);
    }
}
